// 区分开发环境和生产环境  接口地址
import { baseUrl, tokenKey } from '@/common/config.js'
import { useUserStore } from '@/stores'


const Authorization = ''

// 初始化请求配置
uni.$uv.http.setConfig((config) => {
	/* config 为默认全局配置*/
	config.baseURL = baseUrl; /* 根域名 */
	config.timeout = 10000;
	config.sslVerify = false;
	return config;
});

// 请求拦截
uni.$uv.http.interceptors.request.use(
	(config) => {
		const userStore = useUserStore()
		// 可使用async await 做异步操作
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		config.data = config.data || {};
		const token = uni.getStorageSync("token");

		config.header = {
			...config.header,
			[tokenKey]: token
		};

		// 根据custom参数中配置的是否需要token，添加对应的请求头
		if (config?.custom?.auth) {
			// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
		}
	
		console.log('请求: ' + config.url+ "=>", config)

		return config;
	},
	(config) => {
		// 可使用async await 做异步操作
		return Promise.reject(config);
	}
);

uni.$uv.http.interceptors.response.use(
	(response) => {
		const res = response.data
        if (response.status == 200) {
            // console.log('response (' + response.config.method + ":" + response.config.url.replace(response.config.baseURL, "") + ") =>", response.data)
        } else {
            console.log('响应: ' + response.config.url.replace(response.config.baseURL, "") + "=>", response)
        }
        // if (res instanceof Blob) { //文件下载
        //     res.response = response;
        //     return res
        // }
        if (res instanceof Object) {
            // 401
            if (res.code === 'UNAUTHORIZED') {
                // to re-login
				if(uni.getStorageSync("token")){
					uni.showModal({
						title: "登录过期",
						content: "您已登录过期，请重新登录",
						success: function (res) {
						if (res.confirm) {
							console.log("用户点击确定");
							uni.navigateTo({
							url: "/pages/login/login",
							});
						} else if (res.cancel) {
							console.log("用户点击取消");
							uni.navigateBack();
						}
						},
					});
					userStore.logout();
				}
                return res;
            }
            else if (res.code !== 'OK') {
                // 403
                if (res.code === 'FORBIDDEN') {
                    uni.$uv.toast('暂无权限，请联系管理员开通')
                } else {
                    uni.$uv.toast(res.message || "网络异常")
                }
                return Promise.reject(new Error(res.message || 'Error'))
            } else {
                return res
            }
        } else {

        }
	},
	(response) => {
		// console.log(response);
		// console.log("————————————————————————————————————————————————");
		// const hasToken = uni.getStorageSync("token");
		// const hasLoginPage = uni.getStorageSync("loginPage");
		// // 过期 或 
		if (response.statusCode === 401 || response.data.code === 403) {
			uni.navigateTo({
				url: "/pages/login/login",
			});
		} else if (response.statusCode === 404) {
			uni.$uv.toast('请求地址不存在');
		}else if (response.statusCode === 400) {
			uni.$uv.toast('Bad Request');
		}

		if (response.errMsg.includes('timed out')) {
			uni.$uv.toast('请求超时');
		}
		
		if (response.errMsg.includes('request:fail abort statusCode:-1')) {
			uni.$uv.toast('网络连接失败，请检查网络');
		}
		console.log("error", response);
		// 对响应错误做点什么 （statusCode !== 200）
		return Promise.reject(response);
	}
);


export default uni.$uv.http;
